Azure API Center で Amazon API Gateway 統合機能がプレビューリリースされていたので使ってみた

Azure API Center で Amazon API Gateway 統合機能がプレビューリリースされていたので使ってみた

Clock Icon2025.01.26

いわさです。

Microsoft Azure には Azure API Center という、組織の API を一元的に管理するためのサービスがあります。

https://learn.microsoft.com/ja-jp/azure/api-center/overview

Azure や他のクラウドプロバイダー、あるいはオンプレミスなど、様々な環境の API を管理することができるのですが、先日のアップデートで Amazon API Gateway と統合できるようになりました。この機能によって自動で AWS アカウント上の API を検出して管理したり、自動更新させたりすることができるようになりそうです。

https://azure.microsoft.com/en-us/updates?id=476533

Azure CLI の API Center 拡張のプレビューバージョンを導入する

まず、本日時点で本機能は Azure ポータル上から統合追加を行うことができません。Azure CLI を使って追加します。

Azure API Center は Azure CLI のapic-extensionという拡張機能です。
今回のアップデートはそちらの1.2.0b1バージョンで追加された機能となっています。

https://github.com/Azure/azure-cli-extensions/blob/main/src/apic-extension/HISTORY.rst#120b1

ということで Azure CLI およびapi-extensionのプレビューバージョン導入を行います。
今回検証に使った私の環境ですが、Azure CLI バージョンが少し古い2.67.0で、api-extensionは未導入の環境でした。

% az --version
azure-cli                         2.67.0 *

core                              2.67.0 *
telemetry                          1.1.0

Extensions:
containerapp                     1.1.0b1

Dependencies:

:

% az apic
'apic' is misspelled or not recognized by the system.
Did you mean 'apim' ?

Examples from AI knowledge base:
https://aka.ms/cli_ref
Read more about the command in reference docs

ということで Azure CLI のバージョンアップとapi-extensionのインストールを行います。
az extension add --name apic-extensionで拡張機能のインストールが出来るのですが最初プレビュー機能だということを失念しており 1.1.0 をインストールしてしまいました。

% az upgrade
This command is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
Your current Azure CLI version is 2.67.0. Latest version available is 2.68.0.
Please check the release notes first: https://docs.microsoft.com/cli/azure/release-notes-azure-cli
Do you want to continue? (Y/n): 
==> Updating Homebrew...
==> Downloading https://ghcr.io/v2/homebrew/portable-ruby/portable-ruby/blobs/

:

% az extension add --name apic-extension
Extension 'apic-extension' has a later preview version to install, add `--allow-preview True` to try preview version.

% az --version
azure-cli                         2.68.0

core                              2.68.0
telemetry                          1.1.0

Extensions:
apic-extension                     1.1.0
containerapp                     1.1.0b1

:

--allow-preview Trueオプションをつけることでプレビューバージョンのインストールが可能です。
1.2.0b1へ更新することができました。

% az extension update --name apic-extension --allow-preview True
% az --version
azure-cli                         2.68.0

core                              2.68.0
telemetry                          1.1.0

Extensions:
apic-extension                   1.2.0b1
containerapp                     1.1.0b1

:

操作するためのクライアント環境はこれで良さそうです。

Amazon API Gateway と統合

続いて Azure と AWS の統合を行っていきます。
事前に Azure API Center は作成済みで、今回は機能検証用途のため Free trial プランを使っています。

E3F4436A-CED6-48FA-9CD4-C5999A9FB552.png

Azure API Center から AWS へアクセスできるようにする

本機能の裏側ですが、Azure API Center が AWS の IAM を使って Amazon API Gateway の情報を AWS API 経由で定期的に取得して API 情報を更新するような形となっています。
そのため、まずは Azure に AWS の操作権限を与える必要がありまして、AWS 上で IAM ユーザーを払い出し、アクセスキーとシークレットを Azure Vault に格納します。そしてその Vault へのアクセスを API Center に許可するという形となります。

AWS 側で IAM ユーザーの作成とアクセスキー、シークレットキーの払い出しを行う方法は本記事では割愛しますので、以下などを参考にしてください。

https://dev.classmethod.jp/articles/iam_user_create_access_keys_2023/

作成できたら、aws-access-keyaws-secret-access-keyの 2 つのシークレットを Vault 上に作成し値として保存しておきます。

4674DD6F-EA9F-467C-A4D3-18C8FD170899.png

つづいて、その Vault に Azure API Center がアクセスできる必要がありますので、Azure API Center のマネージド ID を有効化し、上記 Vault へのアクセス権限を割り当てます。
まずは Azure API Center でマネージド ID を有効化します。

1CEA85D6-D9FF-4364-93FA-16091879ED69.png

続いて先ほどの Vault の IAM からKey Vault Secrets Userロールを割り当てました。

8A984A7F-C489-416A-AE71-62D6CF7D0040.png

ちなみに Azure 公式ドキュメント上には AWS 上の IAM ユーザーにどういうポリシーが必要なのかが明記されておらず少し困りました。
私調べでは以下の API Gateway アクションを定期的に実行するようなので、このあたりを参考にポリシーのアクションを絞ってみてください。

82CBB4EA-1853-4FD0-8B88-96115E1C0A04.png

Amazon API Gateway を用意して統合させる

統合を作成する準備が出来たので、実際に使ってみましょう。
コマンドは後述しますが、ひとつの統合ごとに AWS リージョンを指定する形です。API Gateway リソースを指定するオプションはないようで、おそらく対象 AWS アカウントの指定したリージョン内の REST API 情報をごそっと引っ張ってくる仕組みのようです。

ということで AWS 上では次のようにバージニア北部リージョン(us-east-1)上に適当な API が 3 つある状態から開始します。
ちなみに本機能で統合できるのは REST API のみのようなので HTTP や WebSocket には使えないみたいです。

1B5BF402-CE72-4B65-B856-AE3A413E0C44.png

統合コマンドについてはこちらに記載されています。

https://learn.microsoft.com/en-us/azure/api-center/synchronize-aws-gateway-apis?tabs=portal

% az apic integration create aws --resource-group hoge0125api --service-name hoge0125api --integration-name hoge0126azureaws --aws-access-key-reference https://hoge0126aws.vault.azure.net/secrets/aws-access-key/1b4d1efc422f409c8e48a7fb83714d16 --aws-secret-access-key-reference https://hoge0126aws.vault.azure.net/secrets/aws-secret-access-key/d3554a8270e649aea3c0a69a9b7af0e8 --aws-region-name us-east-1
This command is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
{
  "amazonApiGatewaySource": {
    "accessKey": "https://hoge0126aws.vault.azure.net/secrets/aws-access-key/1b4d1efc422f409c8e48a7fb83714d16",
    "msiResourceId": "730f026b-fe6c-45b4-b023-b30eac257188/763f62f0-7624-4494-a361-d66c6795649c/systemAssigned",
    "regionName": "us-east-1",
    "secretAccessKey": "https://hoge0126aws.vault.azure.net/secrets/aws-secret-access-key/d3554a8270e649aea3c0a69a9b7af0e8"
  },
  "apiSourceType": "AmazonApiGateway",
  "id": "/subscriptions/a50aeedb-979c-428f-8b2d-28974d5e3d3b/resourceGroups/hoge0125api/providers/Microsoft.ApiCenter/services/hoge0125api/workspaces/default/apiSources/hoge0126azureaws",
  "importSpecification": "always",
  "linkState": {
    "lastUpdatedOn": "2025-01-25T21:27:19.0061414Z",
    "state": "initializing"
  },
  "name": "hoge0126azureaws",
  "resourceGroup": "hoge0125api",
  "systemData": {
    "createdAt": "2025-01-25T21:27:19.0061412Z",
    "lastModifiedAt": "2025-01-25T21:27:19.0061403Z"
  },
  "targetEnvironmentId": "/workspaces/default/environments/amazon-api-gateway",
  "targetLifecycleStage": "design",
  "type": "Microsoft.ApiCenter/services/workspaces/apiSources"
}

コマンドは一瞬で完了しました。
Azure ポータルから API Center を眺めてみると...おっ追加されていますね。

63DEAC65-8E89-4E31-BED1-9E53FD462B73.png

Environments として今回統合として追加した環境が自動で作成されていました。名称は Amazon API Gateway 固定みたいです。なるほど。
今後統合したリージョンとか AWS アカウントが増えるとちょっと管理しにくくなるかもしれない。Environments はコマンドオプションで指定可能っぽかったので、管理しやすいように事前に作成しておくと良さそうです。

41305B33-5754-48C2-BBCE-053D3776CEF4.png

API 定義も次のように確認が出来ました。良いですね。

C72311B4-F5F1-4C7A-A607-9B23AAE44C69.png

DA33E140-1EC1-4D67-ADC0-4F9F15CE9710.png

Amazon API Gateway で新規 API を作成

この統合機能は 1 時間に 1 回程度の頻度で API 情報の更新を行ってくれるみたいです。
試しに Amazon API Gateway 側に新規 API を追加してみましょう。

ED07D72E-47B4-4454-8E2B-B7A5E94ECC1D.png

その後 30 分ほどで Azure API Center 側に新しく追加した API の情報が自動同期されていました。良いですね。

CF27CC7C-37B3-494B-88E9-5F57535201AF.png

さいごに

本日は Azure API Center で Amazon API Gateway 統合機能がプレビューリリースされていたので使ってみました。

マルチクラウドのハブとして Microsoft Azure のいくつかのサービスを活用するのは私は結構好きでして、この API Center の Amazon API Gateway 統合もなかなかおもしろい機能だと思いました。
今回使っていないですが、API Center には API が組織のルールに準拠しているか分析する機能があります。外部の Amazon API Gateway で管理されている API にも一元的にガバナンスを効かせれそうで、活用できるケースが多そうだと感じました。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.